/**
 * vector为可变长数组（动态数组），定义的vector数组可以随时添加数值和删除元素。
 * 注意：在局部区域中（比如局部函数里面）开vector数组，是在堆空间里面开的。
 * 在局部区域开数组是在栈空间开的，而栈空间比较小，如果开了非常长的数组就会发生爆栈。
 * 故局部区域不可以开大长度数组，但是可以开大长度vector。
 * @return
 */
#include <iostream>
#include <vector>


using namespace std;

int main()
{
    // 定义了一个名为 int_vector 的一维数组,数组存储 int类型数据
    vector<int> int_vector;
    // 定义了一个名为 double_vector的一维数组,数组存储 double类型数据
    vector<double> double_vector;

    // 注意：指定数组长度之后（指定长度后的数组就相当于正常的数组了）
    // 定义一个长度为n的数组，初始值默认为0，下标范围[0, n - 1]
    vector<int> v_init_zero(10);
    for (const auto &item: v_init_zero)
    {
        std::cout << item << std::endl;
    }
    // v[0]到v[n-1]所有的元素初始值均为1
    vector<int> v_init_one(10, 1);
    for (const auto &item: v_init_one)
    {
        std::cout << item << std::endl;
    }

    // 初始化中有多个元素
    vector<int> v_init_multi{10, 1, 2, 3, 4, 5, 6, 7, 8, 9};

    // 两个数组中的类型必须相同,a 和 b都是长度为 n + 1，初始值都为0的数组
    vector<int> original_vector(10, 0);
    vector<int> copy_vector(original_vector);

    // 初始化二维均可变长数组
    vector<vector<int>> dynamic_vector;
    vector<int> t1{1, 2, 3, 4};
    vector<int> t2{2, 3, 4, 5};
    dynamic_vector.push_back(t1);
    dynamic_vector.push_back(t2);
    // {3, 4, 5, 6} 可以作为 vector的初始化,相当于一个无名vector
    dynamic_vector.push_back({3, 4, 5, 6});

    // 行列长度均固定 n + 1行 m + 1列初始值为0
    vector<vector<int>> a(5, vector<int>(5, 0));

    return 0;
}

